home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Demo / tkinter / matt / two-radio-groups.py < prev    next >
Encoding:
Python Source  |  2000-06-23  |  3.2 KB  |  111 lines

  1. from Tkinter import *
  2.  
  3. #    The way to think about this is that each radio button menu
  4. #    controls a different variable -- clicking on one of the
  5. #    mutually exclusive choices in a radiobutton assigns some value
  6. #    to an application variable you provide. When you define a
  7. #    radiobutton menu choice, you have the option of specifying the
  8. #    name of a varaible and value to assign to that variable when
  9. #    that choice is selected. This clever mechanism relieves you,
  10. #    the programmer, from having to write a dumb callback that
  11. #    probably wouldn't have done anything more than an assignment
  12. #    anyway. The Tkinter options for this follow their Tk
  13. #    counterparts: 
  14. #    {"variable" : my_flavor_variable, "value" : "strawberry"}
  15. #       where my_flavor_variable is an instance of one of the
  16. #       subclasses of Variable, provided in Tkinter.py (there is
  17. #    StringVar(), IntVar(), DoubleVar() and BooleanVar() to choose
  18. #    from) 
  19.  
  20.  
  21.  
  22. def makePoliticalParties(var):
  23.     # make menu button 
  24.     Radiobutton_button = Menubutton(mBar, text='Political Party', 
  25.                     underline=0)
  26.     Radiobutton_button.pack(side=LEFT, padx='2m')
  27.     
  28.     # the primary pulldown
  29.     Radiobutton_button.menu = Menu(Radiobutton_button)
  30.  
  31.     Radiobutton_button.menu.add_radiobutton(label='Republican', 
  32.                         variable=var, value=1)
  33.  
  34.     Radiobutton_button.menu.add('radiobutton', {'label': 'Democrat', 
  35.                         'variable' : var, 
  36.                         'value' : 2})
  37.  
  38.     Radiobutton_button.menu.add('radiobutton', {'label': 'Libertarian', 
  39.                         'variable' : var, 
  40.                         'value' : 3})
  41.     
  42.     var.set(2)
  43.  
  44.     # set up a pointer from the file menubutton back to the file menu
  45.     Radiobutton_button['menu'] = Radiobutton_button.menu
  46.  
  47.     return Radiobutton_button
  48.  
  49.  
  50. def makeFlavors(var):
  51.     # make menu button 
  52.     Radiobutton_button = Menubutton(mBar, text='Flavors', 
  53.                     underline=0)
  54.     Radiobutton_button.pack(side=LEFT, padx='2m')
  55.  
  56.     # the primary pulldown
  57.     Radiobutton_button.menu = Menu(Radiobutton_button)
  58.  
  59.     Radiobutton_button.menu.add_radiobutton(label='Strawberry',
  60.                         variable=var, value='Strawberry')
  61.  
  62.     Radiobutton_button.menu.add_radiobutton(label='Chocolate',
  63.                         variable=var, value='Chocolate')
  64.  
  65.     Radiobutton_button.menu.add_radiobutton(label='Rocky Road',
  66.                         variable=var, value='Rocky Road')
  67.  
  68.     # choose a default
  69.     var.set("Chocolate")
  70.  
  71.     # set up a pointer from the file menubutton back to the file menu
  72.     Radiobutton_button['menu'] = Radiobutton_button.menu
  73.  
  74.     return Radiobutton_button
  75.  
  76.  
  77. def printStuff():
  78.     print "party is", party.get()
  79.     print "flavor is", flavor.get()
  80.     print
  81.  
  82. #################################################
  83. #### Main starts here ...
  84. root = Tk()
  85.  
  86.  
  87. # make a menu bar
  88. mBar = Frame(root, relief=RAISED, borderwidth=2)
  89. mBar.pack(fill=X)
  90.  
  91. # make two application variables, 
  92. # one to control each radio button set
  93. party = IntVar()
  94. flavor = StringVar()
  95.  
  96. Radiobutton_button = makePoliticalParties(party)
  97. Radiobutton_button2 = makeFlavors(flavor)
  98.  
  99. # finally, install the buttons in the menu bar. 
  100. # This allows for scanning from one menubutton to the next.
  101. mBar.tk_menuBar(Radiobutton_button, Radiobutton_button2)
  102.  
  103. b = Button(root, text="print party and flavor", foreground="red",
  104.        command=printStuff)
  105. b.pack(side=TOP)
  106.  
  107. root.title('menu demo')
  108. root.iconname('menu demo')
  109.  
  110. root.mainloop()
  111.